package ub.pis.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.MalformedURLException;

/**
 * Clase handler que extrae la url al archivo mp3 a partir del archivo
 * xml que retorna el tracker de goear. No hereda de DefaultHandler como
 * las clases que usan la api de last.fm
 * @author nagash
 *
 */
public class GoearXMLHandler {

	private URL url;
	private String mp3_path;

	private final String tracker = "http://www.goear.com/tracker758.php?f=";

	public GoearXMLHandler(String id) throws IOException {
		try {
			this.url = new URL(tracker + id);
		} catch (MalformedURLException e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * Busca la url del mp3, si no existe retorna false.
	 * @return boolean
	 * @throws IOException
	 */
	public boolean get_search_result() throws IOException {
		String content = getURLContent(url).toString();
		try{
			this.mp3_path = content.split("\"")[5];
			return true;
		}
		catch(IndexOutOfBoundsException iob){
			return false;
		}
	}

	/**
	 * Convierte el archivo xml en un objeto tipo CharSequence para poder
	 * tratarlo como un String.
	 * @param url
	 * @return
	 * @throws IOException
	 */
	private final CharSequence getURLContent(URL url) throws IOException {
		URLConnection conn = url.openConnection();
		String encoding = conn.getContentEncoding();

		if (encoding == null) {
			encoding = "ISO-8859-1";
		}

		BufferedReader br = new BufferedReader(new InputStreamReader(conn
				.getInputStream(), encoding));
		StringBuilder sb = new StringBuilder(16384);

		try {
			String line;
			while ((line = br.readLine()) != null) {
				sb.append(line);
				sb.append('\n');
			}
		} finally {
			br.close();
		}
		return sb;
	}

	/**
	 * retorna la url directa del archivo mp3
	 * @return String
	 */
	public String getMp3_path() {
		return mp3_path;
	}
}
